const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
const PORT = 8081;

// 允许访问静态文件（用于提供 view 目录下的 HTML 文件）
app.use('/view1', express.static(path.join(__dirname, '1.导入-包含样式和公式')));
app.use('/view2', express.static(path.join(__dirname, '2.导入-懒加载和增量加载')));
app.use('/view3', express.static(path.join(__dirname, '3.导入-导入后重算')));
app.use('/view4', express.static(path.join(__dirname, '4.公式-增量计算')));
app.use('/view5', express.static(path.join(__dirname, '5.公式-按需计算')));
app.use('/view6', express.static(path.join(__dirname, '6.公式-数组公式')));
app.use('/view7', express.static(path.join(__dirname, '7.公式-LAMBDA公式')));

// 处理文件列表请求的 API
app.get('/api/get-file-list/:folder', (req, res) => {
    const folderName = req.params.folder;
    const validFolders = ['template']; // 允许访问的目录白名单

    if (!validFolders.includes(folderName)) {
        return res.status(403).json({ error: 'Access to this folder is forbidden' });
    }

    const folderPath = path.join(__dirname, folderName);

    fs.readdir(folderPath, (err, files) => {
        if (err) {
            console.error(err);
            return res.status(500).json({ error: 'Unable to read directory' });
        }

        // 过滤掉隐藏文件（可选）
        const visibleFiles = files.filter(file => !file.startsWith('.'));
        res.json(visibleFiles);
    });
});


// 文件下载接口
app.get('/api/download/:folder/:filename', (req, res) => {
    const { folder, filename } = req.params;

    const filePath = path.join(__dirname, folder, path.basename(filename));

    // 检查文件是否存在
    fs.access(filePath, fs.constants.F_OK, (err) => {
        if (err) {
            return res.status(404).json({ error: 'File not found' });
        }

        // 设置下载头信息
        res.download(filePath, filename, (err) => {
            if (err) {
                console.error('Download error:', err);
                if (!res.headersSent) {
                    res.status(500).json({ error: 'Unable to download file' });
                }
            }
        });
    });
});


// 启动服务器
app.listen(PORT, () => {
    console.log(`Server running at http://localhost:${PORT}`);
});